package com.wjm.api.homework;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

/**
 * Data:2022年07月31日
 * Author:wjm
 * Content: Reflect反射机制练习（规避泛型约束）
 *
 *
 *  题目：
 *      需求如下，已知集合List<Integer> list = new ArrayList<>();
 *      要想集合中存入String类型的“wjm”，double类型的10.56
 *
 *
 *  思路：
 *      泛型的约束是在编译期进行绑定的，而反射是动态的运行过程中（运行期）对对象进行访问操作，
 *      所以刚好规避了泛型的约束。
 *
 *  适用场景：
 *      以后如果碰到以下约束是在编译期的，我们可以通过反射机制来规避掉约束
 *
 */
class Homework2 {
    public static void main(String[] args) throws Exception {
        List<Integer> list = new ArrayList<>();

        //正常来说只能向集合中加int类型的元素
        list.add(1);
        list.add(2);

        //首先获取类对象
        Class c = list.getClass();

        //获取add方法
        Method method = c.getMethod("add", Object.class);

        //执行方法
        method.invoke(list,"wjm");
        method.invoke(list,1.056);

        //输出集合
        System.out.println(list);


    }
}
